package co.baiku.boot.common.validate.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 字段检查
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CheckField {
    /**
     * 提示信息;
     */
    String message();


    /**
     * js表达式
     * <p>
     * d为当前要检查的对象，d包含该对象的所有字段和值
     * </p>
     * 最高优先级
     *
     * @return
     */
    String expression() default "";

    /**
     * 正则表达式，适用于字符串<br />
     * 优先级低于js表达式，但高于其他
     *
     * @return
     */
    String regex() default "";

    /**
     * 不能为空(且不为null)，适用于String,Collections,Object[]
     *
     * @return
     */
    boolean notEmpty() default false;

    /**
     * 不能为null
     *
     * @return
     */
    boolean notNull() default false;

    /**
     * 小于，适用于数字
     *
     * @return
     */
    String lt() default "";

    /**
     * 大于，适用于数字
     *
     * @return
     */
    String gt() default "";

    /**
     * 小于等于，适用于数字
     *
     * @return
     */
    String le() default "";

    /**
     * 大于等于，适用于数字
     *
     * @return
     */
    String ge() default "";

    /**
     * 长度范围，适用于字符串。例如：0~6 表示0到6之间为取值范围，只写一个数字表示小于等于该值
     *
     * @return
     */
    String length() default "";

}
